//package com.dkx.springbootwebsocket.service;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.connection.DataType;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Service;
//
//import java.util.Set;
//
//// RedisCleanupService.java
//@Service
//@Slf4j
//public class RedisCleanupService {
//
//    @Autowired
//    private RedisTemplate<String, Object> redisTemplate;
//
//    /**
//     * 清理所有WebSocket相关的Redis数据
//     */
//    public void cleanupWebSocketData() {
//        log.info("开始清理WebSocket相关的Redis数据");
//
//        try {
//            // 清理用户会话数据
//            Set<String> sessionKeys = redisTemplate.keys("user:session:*");
//            if (sessionKeys != null && !sessionKeys.isEmpty()) {
//                log.info("清理用户会话键: {}", sessionKeys);
//                redisTemplate.delete(sessionKeys);
//            }
//
//            // 清理离线消息数据
//            Set<String> offlineKeys = redisTemplate.keys("offline:msg:*");
//            if (offlineKeys != null && !offlineKeys.isEmpty()) {
//                log.info("清理离线消息键: {}", offlineKeys);
//                redisTemplate.delete(offlineKeys);
//            }
//
//            log.info("Redis数据清理完成");
//        } catch (Exception e) {
//            log.error("清理Redis数据时出错", e);
//        }
//    }
//
//    /**
//     * 检查并修复Redis键的数据类型
//     */
//    public void checkAndFixRedisKeys() {
//        log.info("开始检查并修复Redis键的数据类型");
//
//        try {
//            // 检查用户会话键
//            Set<String> sessionKeys = redisTemplate.keys("user:session:*");
//            if (sessionKeys != null) {
//                for (String key : sessionKeys) {
//                    DataType type = redisTemplate.type(key);
//                    if (type != DataType.STRING) {
//                        log.warn("发现类型错误的用户会话键: key={}, type={}, 正在删除", key, type);
//                        redisTemplate.delete(key);
//                    }
//                }
//            }
//
//            // 检查离线消息键
//            Set<String> offlineKeys = redisTemplate.keys("offline:msg:*");
//            if (offlineKeys != null) {
//                for (String key : offlineKeys) {
//                    DataType type = redisTemplate.type(key);
//                    if (type != DataType.LIST) {
//                        log.warn("发现类型错误的离线消息键: key={}, type={}, 正在删除", key, type);
//                        redisTemplate.delete(key);
//                    }
//                }
//            }
//
//            log.info("Redis键类型检查完成");
//        } catch (Exception e) {
//            log.error("检查Redis键类型时出错", e);
//        }
//    }
//}